Changes tend to visually stimulate. Staring at a static painting or other fixed image in a gallery can be interesting and contemplative, but most people tend to prefer to view images that exhibit changes. In the real world, wind blowing through a tree causes every leaf to move and deform. Dropping an object onto the surface of water causes the surface to deform with waves and ripples. The flickering flames of a fire create a continuously changing pattern and also slowly transform the shape of the fuel that is being consumed. A car in a demolition derby will become progressively damaged and dented as it encounters one collision after another. These kinds of visual changes captivate and fascinate us and keep our interest.
Anthropologists and behavioral scientists theorize that we humans have evolved in a way that makes us notice changes in our environment. A slight change in our surroundings might indicate the presence of a predator or an enemy. Whatever the reason, people are generally interested in the way a visual changes. For example, when viewing a vista or landscape, we tend to focus in on what is changing (e.g., smoke rising, cars moving, lights flashing, etc.). The changing parts of the scene tend to interest us more than the static parts.
Computer graphics scientists and video game developers have long sought to realistically model changes in computer graphics generated scenes. Almost anything in the real world can be visually modeled using computer graphics given sufficient computation power and computation time. However, generating computer graphics images interactively in real time based on user input typically has significant constraints with respect to efficiency and often computation power. For example, video game developers are often constrained by relatively low capability computer graphics hardware and the need to produce images that rapidly respond (e.g., once every 1/30 or 1/60 or a second) to changing user inputs.
One approach to changing or deforming a computer graphic model of an object is to mathematically perturb the object's shape in particular desired ways. For example, it is possible to model an object surface using a wire frame that can be mathematically perturbed using various techniques to provide realistic changes or deformations. Such techniques have been used successfully in the past to realistically model a variety of objects such as flags flying in the breeze, ripples propagating across the surface of a pond, and other interesting visual effects. Fractals have been used, for example, as a way to create interesting perturbations that appear to accurately model real world effects such as wind, flames and other influences. While some such techniques have been used successfully in video games, such mathematical techniques can be relatively computationally intensive and may therefore not be readily accessible by those developing interactive images displayable on low-capability computer graphics systems such as home and portable video game platforms.
Another technique that has been widely used in video games and other computer graphics is called “morphing.” The basic idea behind morphing is to interpolate between two different computer graphic models. For example, to realistically model a person's face, one approach is to provide a number of different models with different facial expressions. One model might show the face with no expression. Another model might show the face with a smile. A third model might show the face with a frown. Rather than attempting to calculate mathematically how to change from one model to another, a “morphing” technique is used to generate a range of intermediate images between the two models. Such interpolation between a pair of different position, color or other values can be done relatively efficiently. Any number of progressive changes between the two models can be used depending upon the precision desired. A smooth, gradual interpolation between two different computer models such as facial expressions can be performed interactively with excellent results using low capability computer graphics hardware. See for example Haber et al., SIGGRAPH 2004 Course Notes “Facial Modeling and Animation”: (incorporated herein by reference).
Generally, morphing in the past has been performed with respect to entire models. Dramatic effects such as seen in science fiction motion pictures have been generated in this way. For example, it is possible to “morph” one person's shape into that of another to make it appear as if the person is changing into another person, an animal or other object.
However, there are certain kinds of computer graphics simulations and animations where it would be desirable to change only parts of a model. Take, for example, the example above of a demolition derby car. New dents will appear in various positions on the car's body depending upon where collisions occur. At the end of the demolition derby, the car may be completely damaged and dented. However, if one wished to show progressive denting and deformation of the demolition derby car, it would be necessary to provide selective deformation of different parts of the car's body with each new collision. It is not readily apparent how morphing could be used to provide such an effect. A more common approach might be to selectively calculate perturbations or deformations due to collision impacts at each collision position and apply such deformations to the wireframe model of the car.
We have developed efficient techniques that allow computer graphics objects appear to be progressively deformed while giving the artist complete control over how the final deformed object would appear. In one exemplary illustrative non-limiting implementation, we created two 3-D models: an original undeformed model, and a final, completely deformed model. We then generated data for performing locality based morphing between the models. During interactive run time, we create a new model that will be the drawn model. We also create an internal data structure indicating how much to morph between each vertex of the 3D model. If the object is acted upon during user interaction, we calculate or otherwise determine where the object was acted upon and we also determine how much force or impact was applied to the object at that position. We use this position and force information to perform a locality based morph. It is possible to apply deformation amount to morphing blend values for specific vertices that will be affected. Using the morphing blend values, we morph geometry by interpolating, in a spatially localized way, between the original non-deformed model and the completely deformed model. We then update vertex normals so that the lighting will be corrected.
Using such a technique, we can provide very efficient transformation between the two objects with only a part of the displayed model showing deformations based for example on user interaction. It is thus possible to selectively morph only certain portions of the model while allowing other portions of the model to remain undeformed or otherwise unchanged. We can provide such effects while using and storing only two initial models—a completely undeformed model and a completely deformed model.
One exemplary illustrative non-limiting specific implementation is to simulate or animate damage to an object based on an attack. For example, in a fighting video game, a user can target different portions of an object such as a robot, a building or other enemy and apply projectiles, hammer blows or other forms of attack can cause the object to become progressively damaged in different places depending upon where the attack lands. Our locality-based morphing technique provides an efficient way to model such progressive damage on a low-capability computer graphics platform such as a home or portable video game machine.